package com.example.controller;

import com.example.entity.Admin;
import com.example.entity.RespBean;
import com.example.mapper.AdminMapper;
import com.example.service.IAdminService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.*;

/**
 * 更新用户信息
 *
 * @author: liu
 * 2022-04-02-09:37
 **/
@RestController
public class UpdateUserInfoController {
    @Value("${file.upload-path}")
    private String pictureUrl;

    @Autowired
    private IAdminService iAdminService;
    @Autowired
    private AdminMapper adminMapper;

    @ApiOperation("更新用户信息")
    @PutMapping("/admin/upd-info")
    public RespBean updateAdmin(@RequestBody Admin admin){
        if(true){

            adminMapper.updUserInfo(admin.getName(),admin.getTelephone(),admin.getPhone(),admin.getRemark(),
                    admin.getAddress(),admin.getId());

//            SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(admin,null,authentication.getAuthorities()));
            return RespBean.success("更新成功");
        }
        return RespBean.error("更新失败");
    }

    @ApiOperation("更新用户头像")
    @PostMapping("/admin/upd-user-face/")
    public RespBean updateUserFace(@RequestParam("file") MultipartFile file,Admin admin) {
//        System.out.println("the admin.getUserface is " + file);
        System.out.println("the admin.getID is " + admin.getId());
//        System.out.println("the admin.getUserface is " + imageUrl);
        if (file.isEmpty()){
            System.out.println("文件为空");
        }
//        //保存图片的路径（这是存在我项目中的images下了，你们可以设置路径）
//        String filePath = "src/main/resources/images";
//        //获取原始图片的拓展名
//        String originalFilename = file.getOriginalFilename();
//        //新的文件名字
//        String newFileName = UUID.randomUUID() + originalFilename;
//        //封装上传文件位置的全路径
//        File targetFile = new File(filePath, newFileName);
//        //把本地文件上传到封装上传文件位置的全路径
//        try {
//            file.transferTo(targetFile);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        String theImageUrl = "http://localhost:8081/resources/images/" + newFileName;

        //String filename = file.getOriginalFilename();   //校验文件名
//        String contentType = file.getContentType();//校验文件类型
//        System.out.println("contentType == "+contentType);
//        long size = file.getSize();                     //校验文件大小
//        System.out.println("size == " + size);
//        //文件全名称
//        String fileName = file.getOriginalFilename();
//        System.out.println("filename == " + fileName);
//        //后缀名
//        String suffixName = fileName.substring(fileName.lastIndexOf("."));
//        //文件名
//        String prefixName = fileName.substring(0, fileName.lastIndexOf("."));
//        //上传后的路径
//        String filePath = pictureUrl;
//        //随机生成数字
//        UUID uuid = UUID.randomUUID();
//        // 新文件名 防止同一张图片重复提交名称冲突
//        fileName = prefixName + uuid + suffixName;
//        //绝对路径--文件的存储路径
//        String absolutepath = filePath + fileName;
//
//        //获取本机IP
//        String host = null;
//        try {
//            host = InetAddress.getLocalHost().getHostAddress();
//        } catch (UnknownHostException e) {
//            e.printStackTrace();
//        }
//
//        //读取路径 http://192.168.xx.xxx:8080/img/这个路径在浏览器中可以访问到，这样重新在数据库中读出来可以直接显示
////        String readfilePath = "http://localhost:8081/upload/images/";
//        String readfilePath = "http://" + host + ":" + 8081 + "/upload/images/";
//        String readUrl = readfilePath + fileName;
//        //logger.info("文件名：{}，文件的类型：{},文件的大小：{}", filename,contentType,size);
//        try {
//            //restorePath存储目录，在配置文件中存储，通过@value拿到。
//            File parentPath = new File(absolutepath);
//            System.out.println("parentPath == "+parentPath);
//            if (!parentPath.exists()){
//                parentPath.mkdir();     //判断父路径是否存在，不存在就创建出来
//            }
////            assert filename != null;
////            File newFile = new File(parentPath);
//            file.transferTo(parentPath);   //复制文件
////            String resultPath = newFile.getPath();
////            System.out.println("上传文成，文件路径为：" + resultPath);
//            adminMapper.updUserFace(readUrl,admin.getId());
//        } catch (IOException e) {
//            e.printStackTrace();
//        }

//        adminMapper.updUserFace(String.valueOf(file),admin.getId());

        return RespBean.success("成功");

//        if (file.isEmpty()) {
//            return RespBean.error("上传文件为空");
//        }
//        else {
//            //文件全名称
//            String fileName = file.getOriginalFilename();
//            //后缀名
//            String suffixName = fileName.substring(fileName.lastIndexOf("."));
//            //文件名
//            String prefixName = fileName.substring(0, fileName.lastIndexOf("."));
//            //上传后的路径
//            String filePath = pictureUrl;
//            //随机生成数字
//            UUID uuid = UUID.randomUUID();
//            // 新文件名 防止同一张图片重复提交名称冲突
//            fileName = prefixName + uuid + suffixName;
//            //绝对路径--文件的存储路径
//            String absolutepath = filePath + fileName;
//            //读取路径 http://192.168.xx.xxx:8080/img/这个路径在浏览器中可以访问到，这样重新在数据库中读出来可以直接显示
//            String readfilePath = "http://localhost:8081/img/";
//            String readUrl = readfilePath + fileName;
//            //将图片准备写入本地或服务器
//            File dest = new File(absolutepath);
//            //查看是否有父目录没有则创建
//            if (!dest.getParentFile().exists()) {
//                dest.getParentFile().mkdirs();
//            }
//
//            //调用mybatis-plus将数据插入数据库
//            if (readUrl != null) {
//                try {
//                    //上传图片
//                    file.transferTo(dest);
//                    adminMapper.updUserFace(readUrl, admin.getId());
//                    return RespBean.success("更新成功");
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//            } else {
//                return RespBean.error("更新失败");
//            }
//        }
//        return RespBean.success("");
    }


    @ApiOperation("更新用户头像地址")
    @PostMapping("/admin/updUserFaceUrl/")
    public RespBean updUserFaceUrl(@RequestBody Admin admin){

        System.out.println("the imageUrl,id is "+admin.getUser_face()+admin.getId());

        adminMapper.updUserFace(admin.getUser_face(),admin.getId());

        return RespBean.success("更新成功");
    }


//        String imgBase64 = baseImg.requestUrlToBase64(file);
//        if(imgBase64 != null){
//            adminMapper.updUserFace(imgBase64,admin.getId());
//            return RespBean.success("更新头像成功");
//        }else {
//            return RespBean.error("更新头像失败");
//        }

//        //图片名称
//        String imgName =file.getOriginalFilename();
//        File saveFile = new File(pictureUrl);
//        String ext = "." + imgName.substring(imgName.lastIndexOf(".")+1);
//        // 获取时间字符串
//        String dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss").format(LocalDateTime.now());
//        // 生成新的文件名
//        String newFileName = dateTimeFormatter + UUID.randomUUID().toString().replaceAll("-","") + ext;
//        // 文件在本机的全路径
//        File filePath = new File(saveFile, newFileName);
//
//        System.out.println("the filePath is "+filePath);
//        System.out.println("the filePath is "+filePath.toString());
//        if (!filePath.getParentFile().exists()){
//            filePath.getParentFile().mkdirs();
//        }
//        try{
//            file.transferTo(filePath);
//            // 返回文件名
//            adminMapper.updUserFace(baseImg.requestUrlToBase64(String.valueOf(filePath)),admin.getId());
//            return RespBean.success("更新头像成功");
//        }catch (IOException e){
//            e.printStackTrace();
//            return RespBean.error("更新头像失败");
//        }

////        String fileName = file.getOriginalFilename();
//        //图片名称
//        String imgName =file.getOriginalFilename();
//        File saveFile = new File(pictureUrl);
//        if (!saveFile.exists()) {
//            //若不存在该目录，则创建目录
//            saveFile.mkdir();
//        }
//        //获取本机IP
//        try {
//            host = InetAddress.getLocalHost().getHostAddress();
//        } catch (UnknownHostException e) {
//            logger.error("get server host Exception e:", e);
//        }
//        UUID uuid = UUID.randomUUID();
//        String newFileName = uuid + imgName;
//        //拼接后的url
////        String ImageUrl = Objects.requireNonNull(file.getOriginalFilename()).replace(".","")+uuid;
////        String ImageUrl = (host + ":" + port + sonpath + imgName).toString();
//
//
//        try {
//            //将文件保存指定目录
//            file.transferTo(new File(pictureUrl + newFileName));
//            //存入数据库，这里可以加if判断
//            adminMapper.updUserFace(newFileName,admin.getId());
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return RespBean.success("头像更新成功");
//        if (file.isEmpty()) {
//            System.out.println("文件未获取。。。");
//            return RespBean.error("文件未获取");
//        }else {
////            //拼接url，采用随机数，保证每个图片的url不同
////            UUID uuid = UUID.randomUUID();
////            //拼接后的url
////            String ImageUrl = file.getOriginalFilename().replace(".","")+uuid;
////            System.out.println("the ImageUrl is "+ImageUrl);
//            //存入数据库，这里可以加if判断
//            adminMapper.updUserFace(admin.getUser_face(),admin.getId());
//            return RespBean.success("头像更新成功");
//        }
//    }

    @ApiOperation("更新密码")
    @PutMapping("/admin/upd-pass")
    public RespBean updateAdminPassword(@RequestBody Map<String,Object> info){
        String oldPass=(String)info.get("oldPass");
        String newPass=(String)info.get("newPass");
        Integer adminId=(Integer) info.get("adminId");
//        return iAdminService.updateAdminPassword(oldPass,newPass,adminId);
//        System.out.printf("oldPass,newPass,adminId is " +oldPass+newPass+adminId);
        return iAdminService.updateAdminPassword(oldPass,newPass,adminId);
    }
}
